+++ /dev/null
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Graphics;
-
-namespace SuperPolarity
-{
- class ParticleEngine
- {
- private Random random;
- public Vector2 EmitterLocation { get; set; }
- public Color Color;
- private List<Particle> particles;
- private List<Texture2D> textures;
-
- public ParticleEngine(List<Texture2D> textures, Vector2 location)
- {
- EmitterLocation = location;
- this.textures = textures;
- this.particles = new List<Particle>();
- random = new Random();
- Color = Color.Red;
- }
-
- private Particle GenerateNewParticle()
- {
- Texture2D texture = textures[random.Next(textures.Count)];
- Vector2 position = EmitterLocation;
- Vector2 velocity = new Vector2(
- 1f * (float)(random.NextDouble() * 2 - 1),
- 1f * (float)(random.NextDouble() * 2 - 1));
- float angle = 0;
- float angularVelocity = 0.1f * (float)(random.NextDouble() * 2 - 1);
- Color color = Color;
- float size = (float)random.NextDouble();
-
- int ttl = 20 + random.Next(40);
-
- return new Particle(texture, position, velocity, angle, angularVelocity, color, size, ttl);
- }
-
- public void Update()
- {
- int total = 10;
-
- for (int i = 0; i < total; i++)
- {
- particles.Add(GenerateNewParticle());
- }
-
- for (int particle = 0; particle < particles.Count; particle++)
- {
- particles[particle].Update();
- if (particles[particle].TTL <= 0)
- {
- particles.RemoveAt(particle);
- particle--;
- }
- }
- }
-
- public void Draw(SpriteBatch spriteBatch)
- {
- //spriteBatch.Begin();
- for (int index = 0; index < particles.Count; index++)
- {
- particles[index].Draw(spriteBatch);
- }
- //spriteBatch.End();
- }
- }
-}